Data

First, we will read in the MISR datasets which have been matched to the AQS and CSN datasets. These data were matched spatially by considering every AQS/CSN data collection site within a 2.2 km radius of a MISR data pixel, and these matches were further filtered by matching these observations based on the dates when they were recorded.

In addition to the data which we collected from the CSN dataset, we will also use a formula to estimate the total dust mass in a given area, based on the presence of certain elements.

The formula to compute dust mass is given by \(\text{Dust Mass} = 2.2\times\text{Al} + 2.49\times\text{Si} + 1.63\times\text{Ca} + 1.94\times\text{Ti} + 2.42\times\text{Fe}\).

Exploratory Data Analysis

First, we will do some exploratory data analysis for these datasets, so we can have a better understanding of the data which we collected.

Numerical Summaries

We will examine some brief numerical summaries of our main four variables, in order to know more about their general distributions.

Numerical Summaries of the variables we want to predict
Minimum 25th percentile Median 75th percentile Maximum IQR Range Mean Standard Deviation Present Values Missing Values
Dust Mass -0.0284 0.3503 0.6126 1.0773 18.3301 0.7270 18.3584 0.9065 1.0361 5115 174
Nitrate 0.0000 0.6300 1.4000 3.4400 53.9000 2.8100 53.9000 3.0576 4.6030 5073 216
Sulfate 0.0000 0.5640 0.9943 1.6800 10.7000 1.1160 10.7000 1.3069 1.1535 5094 195
PM2.5 -7.2000 5.0000 8.0833 12.4583 529.4167 7.4583 536.6167 10.4596 10.6680 157005 0

Based on the table above, we see that there are a few negative values recorded for Dust Mass and PM2.5 concentrations. As a concentration must be strictly non-negative (as we cannot have negative amounts of a particle), we will replace all negative values with 0.

Histograms

In addition to examining numerical summaries of these values, we will also examine histograms of the values to see the overall distributions of these variables in a more visual manner.

From the plots above, we see that the distributions for each of these four variables are all somewhat right-skewed, as there are quite a few high-valued outliers in these datasets, and there are not a corresponding amount of low values in these data, as these data are all strictly non-negative.

The log-plots above all appear to be relatively symmetrical and look somewhat like Normal distributions, which may be helpful for model fitting and prediction purposes, as these distributions are significantly less skewed by their few large values.

Historical Data

In addition to the histograms which show the general distributions of these data over our 22-year period, we have created time series plots of dust mass, nitrate, PM2.5, and sulfate concentrations in California over time as a way to visualize how these quantities have changed over time.

The PM2.5 data is sourced from the AQS data collection sites, whereas the dust mass, nitrate, and sulfate concentrations come from the CSN datasets.

Monthly Dust Mass Concentrations in California Monthly Nitrate Concentrations in California

Monthly PM2.5 Concentrations in California

Monthly Dust Mass Concentrations in California

Finding Missing Values

To start off, we will examine counts of missing values in our datasets, to determine how much of the data which we aim to use is actually present in the dataset.

Counts of Variables in the merged MISR and AQS dataset
Variable Name Recorded Values Missing Values
Date 157005 0
PM25 157005 0
AOD 50089 106916
AOD_uncertainty 50089 106916
angstrom_exp_550_860 50089 106916
AOD_absorption 50089 106916
AOD_nonspherical 50089 106916
small_mode_AOD 50089 106916
medium_mode_AOD 50089 106916
large_mode_AOD 50089 106916
aod_mix_01 57964 99041
aod_mix_02 58151 98854
aod_mix_03 58387 98618
aod_mix_04 58675 98330
aod_mix_05 58870 98135
aod_mix_06 59079 97926
aod_mix_07 59220 97785
aod_mix_08 59105 97900
aod_mix_09 58027 98978
aod_mix_10 54411 102594
aod_mix_11 63009 93996
aod_mix_12 62969 94036
aod_mix_13 62990 94015
aod_mix_14 62899 94106
aod_mix_15 62332 94673
aod_mix_16 61316 95689
aod_mix_17 59339 97666
aod_mix_18 56133 100872
aod_mix_19 51824 105181
aod_mix_20 46472 110533
aod_mix_21 49385 107620
aod_mix_22 49028 107977
aod_mix_23 48577 108428
aod_mix_24 47605 109400
aod_mix_25 46377 110628
aod_mix_26 45070 111935
aod_mix_27 43693 113312
aod_mix_28 42072 114933
aod_mix_29 40508 116497
aod_mix_30 38868 118137
aod_mix_31 61811 95194
aod_mix_32 61716 95289
aod_mix_33 61529 95476
aod_mix_34 60895 96110
aod_mix_35 60081 96924
aod_mix_36 58316 98689
aod_mix_37 55627 101378
aod_mix_38 52266 104739
aod_mix_39 48168 108837
aod_mix_40 43772 113233
aod_mix_41 53302 103703
aod_mix_42 53203 103802
aod_mix_43 53113 103892
aod_mix_44 52600 104405
aod_mix_45 51719 105286
aod_mix_46 50327 106678
aod_mix_47 48476 108529
aod_mix_48 46027 110978
aod_mix_49 43313 113692
aod_mix_50 40558 116447
aod_mix_51 60791 96214
aod_mix_52 54792 102213
aod_mix_53 38906 118099
aod_mix_54 51407 105598
aod_mix_55 43584 113421
aod_mix_56 33043 123962
aod_mix_57 38243 118762
aod_mix_58 33797 123208
aod_mix_59 29758 127247
aod_mix_60 29972 127033
aod_mix_61 29164 127841
aod_mix_62 28486 128519
aod_mix_63 38842 118163
aod_mix_64 37758 119247
aod_mix_65 36746 120259
aod_mix_66 35872 121133
aod_mix_67 29471 127534
aod_mix_68 28945 128060
aod_mix_69 28730 128275
aod_mix_70 28666 128339
aod_mix_71 28061 128944
aod_mix_72 28061 128944
aod_mix_73 28068 128937
aod_mix_74 28088 128917

First, we notice that there are no missing values for the Date and PM2.5 variables, which is excellent, as these are arguably our two most important variables.

We can also notice that there are the same amount of recorded and missing values for each of the 8 AOD variables. If we examine these 8 variables further, we find that they are a “package deal”; for each observation, there is either a recorded value for all 8 of these variables, or a missing value for all 8 variables.

Unfortunately, the same cannot be said for the 74 AOD mixture variables. From the table above, we can clearly see that the number of available observations varies for each of the 74 mixtures. However, of these 74 mixtures, the mixtures with the fewest number of recorded observations (aod_mix_71 and aod_mix_72) each have 28061 recorded values. Furthermore, a table containing all 74 mixtures would have 27980 observations which have a recorded value for each of the 74 mixtures, which is a fair amount of data to work with.

Charts and Graphs

Next, we will create some charts and plots of the matched MISR data, to get visual representations of the data which we have collected.

First, we will create a “correlation heatmap” to visually depict the correlations between the 74 AOD mixtures which were collected in the MISR data. In the correlation heatmap shown below, the correlations between these different mixtures are measured from -1 to 1, and each square in the heatmap is coloured in, with it’s colour and intensity proportional to the correlation between the variables.

Correlation Heatmap for the 74 MISR Mixtures

As we can clearly see in the correlation heatmap displayed above, the 74 AOD mixtures in the collected MISR data are all strongly correlated with one another, as the entire heatmap is green.

In fact, the weakest correlation between a pair of these 74 AOD mixtures is 0.681, which is the correlation between aod_mix_01 and aod_mix_44, which is still considered to be a strong positive linear relationship.

Model Fitting

Next, we will test a variety of different model fitting techniques on our dataset in order to determine which models are generally more efficient and serve as better models to make predictions for our dataset.

We will create a whole host of different models, as we have multiple different values in these two datasets which we want to predict, and there are multiple different sets of predictors which we aim to incorporate.

The 6 main values which we want to predict are; PM2.5, \(\text{SO}_{4}^{2-}\) (sulfate), \(\text{NO}_{3}^{-}\) (nitrate), dust mass, elemental carbon, and organic carbon. The two primary sets of predictors which we want to use are the 8 measured AOD values, and the 74 MISR AOD mixtures.

First, we will split each of our two datasets into a training and a test dataset, with 75% of the data being placed in the training set, and the remaining 25% being put into the validation set.

Model Performance of xgboost models on the test dataset
Model: Predicting PM2.5 using AOD
eta max_depth nrounds RMSE R2
0.05 1 10 10.459425 0.1493412
0.10 1 10 9.055151 0.1767925
0.30 1 10 7.964271 0.2165171
0.60 1 10 7.810849 0.2289926
0.05 2 10 10.291689 0.2197569
0.10 2 10 8.779542 0.2384220
0.30 2 10 7.555304 0.2866703
0.60 2 10 7.565289 0.2760884
0.05 4 10 10.031215 0.3013125
0.10 4 10 8.369653 0.3127772
0.30 4 10 7.231716 0.3396954
0.60 4 10 7.234892 0.3386263
0.05 5 10 9.969526 0.3193367
0.10 5 10 8.281032 0.3327511
0.30 5 10 7.068343 0.3692694
0.60 5 10 7.016747 0.3777852
0.05 8 10 9.818929 0.3935642
0.10 8 10 7.981002 0.4113494
0.30 8 10 6.558693 0.4593767
0.60 8 10 6.755960 0.4232079
0.05 10 10 9.739460 0.4346918
0.10 10 10 7.816178 0.4595445
0.30 10 10 6.349096 0.4937576
0.60 10 10 6.511575 0.4647402
0.05 1 20 9.105504 0.1739113
0.10 1 20 8.210033 0.2090691
0.30 1 20 7.770747 0.2420722
0.60 1 20 7.719344 0.2463335
0.05 2 20 8.821228 0.2385989
0.10 2 20 7.842698 0.2674109
0.30 2 20 7.472983 0.2948138
0.60 2 20 7.364234 0.3140178
0.05 4 20 8.419911 0.3152923
0.10 4 20 7.403492 0.3336410
0.30 4 20 7.109047 0.3607308
0.60 4 20 7.150856 0.3548949
0.05 5 20 8.321698 0.3357164
0.10 5 20 7.269255 0.3567355
0.30 5 20 6.970953 0.3852710
0.60 5 20 6.890620 0.3997755
0.05 8 20 8.022824 0.4162900
0.10 8 20 6.813353 0.4447399
0.30 8 20 6.342296 0.4922918
0.60 8 20 6.537188 0.4603011
0.05 10 20 7.872054 0.4592801
0.10 10 20 6.571777 0.4896941
0.30 10 20 6.193722 0.5151843
0.60 10 20 6.207988 0.5139861
0.05 1 50 8.087501 0.2180405
0.10 1 50 7.830739 0.2404862
0.30 1 50 7.638379 0.2643936
0.60 1 50 7.625241 0.2645706
0.05 2 50 7.724220 0.2725675
0.10 2 50 7.482533 0.2977338
0.30 2 50 7.324174 0.3215493
0.60 2 50 7.204552 0.3436270
0.05 4 50 7.225187 0.3544345
0.10 4 50 7.120175 0.3592954
0.30 4 50 6.881702 0.4009257
0.60 4 50 7.006226 0.3815359
0.05 5 50 7.147615 0.3658657
0.10 5 50 6.965441 0.3868351
0.30 5 50 6.764709 0.4211174
0.60 5 50 6.585932 0.4518324
0.05 8 50 6.676898 0.4508266
0.10 8 50 6.438433 0.4772174
0.30 8 50 6.097911 0.5302173
0.60 8 50 6.281336 0.5029195
0.05 10 50 6.396823 0.4988671
0.10 10 50 6.143867 0.5234943
0.30 10 50 5.934301 0.5546415
0.60 10 50 5.913919 0.5608757
0.05 1 100 7.839321 0.2394777
0.10 1 100 7.705564 0.2557450
0.30 1 100 7.575070 0.2747541
0.60 1 100 7.565109 0.2763494
0.05 2 100 7.481418 0.2970362
0.10 2 100 7.370097 0.3138735
0.30 2 100 7.247973 0.3354781
0.60 2 100 7.141846 0.3550555
0.05 4 100 7.065547 0.3697783
0.10 4 100 7.021184 0.3764840
0.30 4 100 6.702298 0.4317206
0.60 4 100 6.670893 0.4381197
0.05 5 100 6.955024 0.3889279
0.10 5 100 6.852686 0.4061668
0.30 5 100 6.505249 0.4648197
0.60 5 100 6.366521 0.4883440
0.05 8 100 6.444634 0.4762579
0.10 8 100 6.264971 0.5047043
0.30 8 100 5.876238 0.5634199
0.60 8 100 5.952763 0.5548795
0.05 10 100 6.166363 0.5200716
0.10 10 100 5.955328 0.5519108
0.30 10 100 5.666083 0.5938452
0.60 10 100 5.645145 0.6029751

Of the 96 xgboost models which we fitted as seen in the table above, the lowest RMSE among the 96 models was 5.6451448, and the highest R2 value among these models was 0.6029751.

Coincidentally, the xgboost model which attained the lowest RMSE was also the xgboost model which attained the highest R2 value. This model had the parameters eta = 0.6, max_depth = 10, and nrounds = 100, which were all the highest values used for these respective variables.